#!/usr/bin/env node

let http = require('http'),
    fs = require('fs'),
    items = loadData();

http.createServer((req, res) => {
    console.log(req.headers);
    console.log('');

    switch(req.method) {
        case 'GET':
            get(res);
        break;

        case 'POST':
            insert(req, res);
        break;

        case 'DELETE':
            del(req, res);
        break;

        case 'PUT':
            change(req, res);
        break;

        default:
        break;                                                                
      }

}).listen(8080);

function get(res) {
    let body = JSON.stringify(items);

    res.setHeader('Content-Length', Buffer.byteLength(body));
    res.setHeader('Content-Type', 'text/plain; charset="utf-8"');
    res.setHeader('Access-Control-Allow-Origin', '*');
    res.end(body);

}

function insert(req, res) {
    let item = '';

      req.on('data', (data) => { item += data;  });
      req.on('end', () => {
            items.push(item);
            res.setHeader('Access-Control-Allow-Origin', '*');
            res.end('Insert OK!');                 
      });

}

function del(req, res) {
    let arg = req.url.split('/');
    if(arg[1] === '') {
          items = [];
            
    }
    let i = parseInt(arg[1]);
    res.setHeader('Access-Control-Allow-Origin', '*');
    if(!items[i]) {
        res.statusCode = 404;
        res.end('Not found');
                    
    } else {
        items.splice(i, 1);
        res.end('Delete OK');
    }
}

function change(req, res) {
    let arg = req.url.split('/');
    if(arg[1] === '') {
          items = [];
            
    }
    let item = '';
    res.setHeader('Access-Control-Allow-Origin', '*');
    req.on('data', (chunk) => { item += chunk;  });
    req.on('end', () => {
        let i = parseInt(arg[1]);
        if(!items[i]) {
            res.statusCode = 404;
            res.end('Not found');
                                  
        } else {
            items[i] = item;
            res.end('Change OK');
        }                
    });
}

function loadData() {
  try {
        let data = fs.readFileSync('./data.txt', 'utf8');
            console.log(data);
        return JSON.parse(data);
                  
  } catch(e) { return [];  }

}

process.on('SIGINT', () => {
    fs.writeFileSync('./data.txt', JSON.stringify(items));
    process.exit();
});

